import os
import sys
# sys.path.append(os.path.dirname(os.path.split(sys.argv[0])[0]))
# sys.path.append(os.path.dirname(sys.path[0]))
sys.path.append(os.getcwd())    # 当IDE打开的路径为根路径（即main_0.py所在路径）时有效
# sys.path.append(os.path.dirname(os.getcwd()))   # 当IDE打开的路径为子目录的路径时（即main_1.py所在路径）时有效
# 导入自定义模块、包
import module_A
import package.module_B
import package.sub_package.module_C
import others.module_D
import others.sub_folder.module_E


# 调用函数
module_A.function()
package.module_B.function()
package.sub_package.module_C.function()
others.module_D.function()
others.sub_folder.module_E.function()


def get_upper_dir(FP_path, level=1):
    """自制的os.path.dirname()
    
    level: 

    目前发现当路径中的斜杠多余时，例如："\\\\"，os.path.dirname()能去掉多余的斜杠，而本函数不能。
    """
    path_part = FP_path.split("\\")[0:(-level)]
    dir_name = ""
    i = 0
    list_length = len(path_part)
    while (i < list_length):     # for循环无法差异化处理最后一项
        if (i < (list_length - 1)):
            dir_name = dir_name + path_part[i] + "\\"
        else:
            dir_name = dir_name + path_part[i]  # 最后一层路径末端不添加"\\"
        i += 1
    return dir_name 


path_test = "C:\\不存在\\sub\\tan90\\not existed.py"    # 可以看出不论是os.path.dirname()还是自定义的函数，仅对字符串进行了处理，即使路径不存在也能运行
path_dir = get_upper_dir(path_test, level=1)
print(path_dir)
print(os.path.dirname(path_test))


# 查看路径
print("全部PATH：")
for p in sys.path:
    print(p)

print("__name__:", __name__)
print("__file__:", __file__)
print("os.getcwd():", os.getcwd())
print("sys.path[0]:", sys.path[0])
print("sys.argv[0]:", sys.argv[0])


print("sys.argv[0]的上一级:", os.path.dirname(sys.argv[0]))
print(os.path.join(sys.argv[0], ".."))  # 无效，无法返回上一级
print(os.path.split(sys.argv[0])[0])    # 似乎与os.getcwd()达到了相同的效果
print(os.path.basename(sys.argv[0]))
